package modelo.fabricas;

import modelo.excepciones.YaHayUnaConstruccionTerrestreEnLaUbicacionDeseadaException;
import modelo.excepciones.YaHayUnaRutaPavimentadaEnPerfectasCondicionesEnLaUbicacionDeseadaException;
import modelo.interfaces.ConstruibleTerrestre;
import modelo.mapa.Mapa;
import modelo.mapa.Ubicacion;
import modelo.servicios.RutaPavimentada;

public class FabricaDeRuta {
	
	public RutaPavimentada crearRutaPavimentada(Ubicacion unaUbicacion) 
	{
		ConstruibleTerrestre construccionTerrestre = Mapa.getInstance().obtenerHectareaSegunUbicacion(unaUbicacion).obtenerConstruccionTerrestre();
		if(construccionTerrestre == null )
		{		
			RutaPavimentada rutaPavimentada = new RutaPavimentada();
			Mapa.getInstance().obtenerHectareaSegunUbicacion(unaUbicacion).construccionTerrestre(rutaPavimentada);//aca se contruye en la hectarea
			rutaPavimentada.asignarUbicacion(unaUbicacion);
			return rutaPavimentada;
		}
		else
		{
			if(construccionTerrestre.esTransitable())//Indica que es una ruta pavimentada.
			{
				RutaPavimentada rutaPavimentada = (RutaPavimentada)construccionTerrestre;
				if(rutaPavimentada.obtenerVida() < 100)
				{
					rutaPavimentada.reparar();
					return rutaPavimentada;
				}
				else
				{
					throw new YaHayUnaRutaPavimentadaEnPerfectasCondicionesEnLaUbicacionDeseadaException();
				}
			}
			else
			{
				throw new YaHayUnaConstruccionTerrestreEnLaUbicacionDeseadaException();
			}			
		}
	}

}